package stream流直接写;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/1/11 18:38
 */
public class leetcode2238练习Stream {


    // 简单的遍历
    public boolean solution(String s){
        int []map = new int [10];
        char[] chars = s.toCharArray();
        for(char ch : chars){
            map[ch - '0']++;
        }
        for(int i = 0;i < chars.length;i++){
            if(chars[i] != map[i]){
                return false;
            }
        }
        return true;
    }

    // 使用stream 流 来写
    /*
      这里 要注意 一个点就是 ， Stream 流  一旦关闭之后，就不能使用了，否则 会报异常的！
      所以 注意 一些 流的 终止 相关的 api ，一旦 流 被 这些 api 调用了，就不能使用了！
      所以这里 想多次 复用  chars 是 不合理的
      count() 是终止 操作!
     */
    public boolean streamSolution(String nums){
        IntStream chars = nums.chars();
        // 下面这两种是有区别的， 包装类 和 基本 类型  在使用stream 的时候有点不一样的！
        int arr[] = {};
        Integer array [] = {};
        Stream<Integer> stream2 = Arrays.stream(array);
        IntStream stream1 = Arrays.stream(arr);
        String  s [] = {};
        Stream<String> stream = Arrays.stream(s);
        return IntStream.range(0,nums.length()).allMatch(i -> nums.chars().
                filter(num -> i + 48 == num).count() == nums.charAt(i) - '0');
//        return IntStream.range(0, num.length())
//                .allMatch(i -> IntStream.range(0, num.length()).
//                        mapToObj(idx -> num.toCharArray()[idx]).
//                        filter(item -> item - '0' == i).
//                        collect(Collectors.toList()).size()==num.charAt(i)-'0');
//        return false;
    }

    public static void main(String[] args) {
        String s = "abc";
        IntStream chars = s.chars();
        int sum = chars.sum();
        System.out.println(sum);
        System.out.println(chars);
        System.out.println((int)'a');
    }
    @Test
    public void test(){
        String s = "abc";
        IntStream chars = s.chars();
        int asInt = chars.max().getAsInt();
        System.out.println(asInt); // 99 c 的 Ascii 值
    }

    @Test
    public void test1(){
        // 这个还挺有意思的！
        int nums [] = {10,2,3,4,5};
        IntStream range = IntStream.range(0, nums.length); // 不是 nums 数组的 和， 就是 0 ~ len 组成 的流元素
//        IntStream range = IntStream.range(0, 6);// 15  是 0 ~ 6 的和
        System.out.println(range.filter(i -> i % 2 == 0).count());
//        int sum = range.sum();
//        range.collect(Collectors.toList());
//        System.out.println(sum);
        System.out.println((int)'0');

    }
    @Test
    public void testCollect(){
        String nums = "1210";
        IntStream chars = nums.chars();
        boolean flag = IntStream.range(0,nums.length()).allMatch(i -> nums.chars().
                filter(num -> i + 48 == num).count() == nums.charAt(i) - '0');
        System.out.println(flag);
    }
}
